// PROGRAMA : SCRPE001
// SISTEMA : SISP - SISTEMA DE INFORMACOES DE SEGURANCA PUBLICA
// IDENTIFICACAO CRIMINAL
// BIBLIOTECA : SISP
// CLIENTE : SESEC - SECRETARIA DE ESTADO DA SEGURANCA CIDADA
// OBJETIVO : ESTATISTICAS DE EMISSAO DOS ATESTADOS DE ANTECEDENTES
// TOTALIZANDO POR DIA.(ATESTADOS NOVOS OU DIGITADOS)
// PROGRAMADOR:
// DATA : 25/09/2002

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.text.ParseException;
import java.util.Arrays;

import net.sf.jasperreports.engine.JRException;
import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Scrpe001Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Scrpe001A;
import br.com.vti.sisp_sicrim.antigo.model.SicCadnovo;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Scrg001;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Scrpe001 OBJETIVO : ESTATISTICAS DE EMISSAO DOS ATESTADOS DE ANTECEDENTES TOTALIZANDO POR DIA.(ATESTADOS NOVOS OU DIGITADOS) *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/scrpe001")
public class Scrpe001 {
	Scrpe001 scrpe001Anterior;
	private String faseproc = "0";
	// Views utilizadas
	SicCadnovo sicCadnovoView = new SicCadnovo();
	// Telas/relatorios utilizados
	Scrpe001A scrpe001A;
	Scrpe001Report report;
	// Includes utilizados
	// Areas globais / session
	Scrg001 scrg001; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	private int jCont = 0;
	private int jCont1 = 0;
	private int dtini = 0;
	private int dtfim = 0;
	private int cont = 0;
	private int[] mposto = new int[11];
	private int[] mdata = new int[11];
	private int[] total = new int[11];
	private int totg = 0;
	private String obs1 = "";
	private String obs2 = "";
	private int i = 0;
	private int j = 0;
	private String tdesc = "TOTAL......:";

	private Scrpe001A preMapas() {
		sessao.getScrg001().setWVltw(20);
		sessao.getScrg001().setWProgramaw(this.getClass().getSimpleName().toUpperCase());
		scrpe001A = new Scrpe001A(true, sessao);
		scrpe001A.setjEmpresaj("SEATI");
		Arrays.fill(mposto, 0);
		Arrays.fill(mdata, 0);
		Arrays.fill(total, 0);
		obs1 = "ATESTADOS DIGITADOS OU QUE NAO     ";
		obs2 = "CONSTAM NO CADASTRO DE IDENT. CIVIL";
		scrpe001A.setDataCorrente(UtilBean.obtemDataDia());
		scrpe001A.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		return scrpe001A;
	}

	public Scrpe001(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Scrpe001A scrpe001A) {
		try {
			return main(scrpe001A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroScrcerro(e, this.sessao, "Scrpe001");
		}
		return null;
	}

	private InputStreamDownload main(Scrpe001A pscrpe001A) throws Exception {
		if (pscrpe001A == null) {
			primeiraVez = true;
			scrpe001A = preMapas();
			scrpe001A.setNavegar("../scrpe001/executar");
			result.include("scrpe001A", scrpe001A);
			sessao.setAtributo("Scrpe001", this);
			scrpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(pscrpe001A);
		}

		scrpe001A.receberTela(false, result);

		if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
			Scrp1000 scrp1000 = new Scrp1000(this.result, this.sessao);
			scrp1000.executar(null);
			return null;
		}

		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			scrpe001A.enviarMensagem(null, "");
			result.include("scrpe001A", scrpe001A);
			sessao.setAtributo("Scrpe001", this);
			scrpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(scrpe001A.getDatini(), "ddMMyyyy")) {
			scrpe001A.enviarMensagem("datini", "DATA INICIAL INVALIDA");
			result.include("scrpe001A", scrpe001A);
			sessao.setAtributo("Scrpe001", this);
			scrpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		if (!UtilBean.validarMascara(scrpe001A.getDatfim(), "ddMMyyyy")) {
			scrpe001A.enviarMensagem("datfim", "DATA FINAL INVALIDA");
			result.include("scrpe001A", scrpe001A);
			sessao.setAtributo("Scrpe001", this);
			scrpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		dtini = scrpe001A.getDatini();
		dtini = (int) funcoes.sissd002(scrpe001A.getDatini());
		dtfim = scrpe001A.getDatfim();
		dtfim = (int) funcoes.sissd002(scrpe001A.getDatfim());

		if (dtini > dtfim) {
			scrpe001A.enviarMensagem("", "DATA INICIAL > DATA FINAL");
			result.include("scrpe001A", scrpe001A);
			sessao.setAtributo("Scrpe001", this);
			scrpe001A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		report = new Scrpe001Report();

		report.setDatini(scrpe001A.getDatini());
		report.setDatfim(scrpe001A.getDatfim());
		report.setDataCorrente(scrpe001A.getDataCorrente());

		// //DEFINE PRINTER(EMF = 1)
		// RELATORIO 1 PS=60 LS=132 SG=OFF
		report.setPageSize(60);
		report.setLineSize(132);
		// RELATORIO
		// report.gravaRelatorio(1);
		// UtilBean.mensagemTexto("  "
		// "* SESEC   - SECRETARIA DE ESTADO DA SEGURANCA CIDADA" "Pagina: "
		// *PAGE-NUMBER(EMF)
		// "* SEATI - SECRETARIA ADJUNTA DE TECNOLOGIA DA INFORMACAO" "Data..: "
		// *DATE "* INSTITUICAO DE IDENTIFICACAO"
		// "* ATESTADOS DE ANTECEDENTES EMITIDOS" "PERIODO: "
		// scrpe001A.getDatini() " -" scrpe001A.getDatfim() "-"
		// "*** TOTAL DE ATESTADOS EMITIDOS  EM:" "-");
		// RELATORIO
		detalhe();
		rodape();
		return report.imprimir();
	}

	private void detalhe() throws Exception {
		// Par�grafo: i1Read()
		while (sicCadnovoView.leituraDataRegFaixa(dtini, dtfim)) {
			cont += 1;
			if (cont > 50) {
				// scrpe001A.enviarReceberTela(false, result);
				cont = 0;
			}

			if (sicCadnovoView.getTipoRg().equals("ET")) {
				if (scrpe001A.getIposto() == 0) {
					j += 1;
					if (j > 10) {
						j = 1;
					}

					report.setMposto(j, sicCadnovoView.getNumeroPosto());
					dtini = sicCadnovoView.getDataReg();
					dtini = (int) funcoes.sissd002(dtini);
					jCont++;
					report.setJcont(jCont);
					jCont1++;
					report.setJcont1(jCont1);
					totg = jCont1;
				} else {
					if (scrpe001A.getIposto() == sicCadnovoView.getNumeroPosto()) {
						j += 1;
						if (j > 10) {
							j = 1;
						}

						report.setMposto(j, sicCadnovoView.getNumeroPosto());
						dtini = sicCadnovoView.getDataReg();
						dtini = (int) funcoes.sissd002(dtini);
						jCont++;
						report.setJcont(jCont);
						jCont1++;
						report.setJcont1(jCont1);
						totg = jCont1;
					} else {
						break;
					}

				}

			} else {
				break;
			}

			if (sicCadnovoView.quebraNovodatareg()) {
				if (j > 0) {
					totalDia();
					jCont = 0;
				}

			}
		}
		sicCadnovoView.fecha();
	}

	private void rodape() throws ParseException, JRException {
		tdesc = "TOTAL GERAL:";
		report.saltaLinhas(3);
		if (scrpe001A.getWop1().trim().toUpperCase().equals("X")) {
			report.gravaRelatorio(3);
		} else {
			report.gravaRelatorio(3);
			// RELATORIO
		}
	}

	private void totalDia() throws ParseException, JRException {
		i += 1;
		if (scrpe001A.getWop1().equals("X")) {
			if (i > 10) {
				report.gravaRelatorio(4);

				i = 1;
			}

			mdata[i] = dtini;
			total[i] = jCont;
		} else {
			report.gravaRelatorio(4);

			// RELATORIO
			report.saltaLinhas(1);
		}

	}

	private void restaurarEstados(Scrpe001A pscrpe001A) {
		this.scrpe001Anterior = (Scrpe001) sessao.getAtributo("Scrpe001");
		if (pscrpe001A != null) {
			scrpe001A = pscrpe001A;
			scrpe001A.setjEmpresaj("SEATI");
			scrpe001A.setjVersaoj(sessao.getScrg001().getWVersaow());
			scrpe001A.setjProgramaj(sessao.getScrg001().getWProgramaw());
		} else {
			scrpe001A = this.scrpe001Anterior.scrpe001A;
		}
		scrpe001A.setSessao(sessao);
		this.faseproc = this.scrpe001Anterior.faseproc;
	}
}
